package comprehensive;

import java.util.ArrayList;
import java.util.List;

public class Exercises8 {
    // 784、字母大小写进行排序
    List<String> ret;
    StringBuilder path;

    public List<String> letterCasePermutation(String s) {
        // 分成三种情况：1、不改变 2、小写->大写 3、大写->小写
        ret = new ArrayList<>();
        path = new StringBuilder();

        dfs(s,0);

        return ret;
    }

    public void dfs(String s,int pos) {

        if(pos == s.length()) {
            ret.add(path.toString());
            return;
        }

        char ch = s.charAt(pos);

        // 不改变
        path.append(ch);
        dfs(s,pos + 1);
        path.deleteCharAt(path.length() - 1);

        // 改变，但是要判断是否字母
        if(ch > '9' || ch < '0') {
            // 要先进行对其改变
            char tmp = charge(ch);
            path.append(tmp);
            dfs(s,pos + 1);
            path.deleteCharAt(path.length() - 1);
        }
    }

    public char charge(char ch) {
        if(ch >= 'a' && ch <= 'z') {
            return ch -= 32;
        }else {
            return ch += 32;
        }
    }
}
